home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / glassme / gme07 < prev    next >
Text File  |  1991-02-19  |  4KB  |  104 lines

  1.  
  2.  
  3. %TEX
  4.  \subsubsection{Match and build replace list.}
  5. Try to find  an  alternative of a macro 
  6. in which  the formal and actual parameters macth.
  7. Build a replace list simultaniously.
  8. %
  9.  
  10. match (>replace list, >FCComp*f*r,>VList* LIST * ff *rr):->,
  11.      match (>replace list,>f,>ff),
  12.      match (>replace list, >r,>VList *LIST *rr);
  13. match (>replace list, >FCComp*f*r,>VBuiltin*compose operator * LIST * ff*rr*_):->,
  14.  
  15.      match (>replace list,>f,>ff),
  16.      match (>replace list, >r,>rr);
  17. match (>replace list, >FCSym*STRING*name,>actual ):->,
  18.      add to (>replace list,>name,>actual),
  19.      add to (>name, >FORMAL PAR,>empty),
  20.      no renaming of (>actual); 
  21. match (>replace list, >FpEmpty,>VList*LIST*empty):->;
  22. match (>replace list, >FCList*LIST*x,>composed list):
  23.      where (>composed list,VBuiltin*_>), ->,
  24.      match comp (>replace list,>x,>composed list);
  25. match (>replace list, >FCList*LIST*x,>VList*LIST*y):->,
  26.      match els (>replace list,>x,>y), ->;
  27. match (>replace list, >fp int etc *i f num*val,>par int etc  * i f num*val):. 
  28.  
  29.  
  30. match comp (>replace list, >x*y,>VBuiltin*cp*LIST*xx*yy*_): ->,
  31.      match (>replace list,>x,>xx), 
  32.      match comp (>replace list,>y,>yy);
  33. match comp (>replace list, >v,>v ):.
  34.  
  35.  
  36. match els (>replace list, >x*y,>u*v): ->,
  37.      match (>replace list,>x,>u), 
  38.      match els (>replace list,>y,>v);
  39. match els (>replace list, >v,>v ):.
  40.  
  41.  
  42. no renaming of (>VSym*or*STRING*name): ->,
  43.     add to (>name,>FORMAL PAR,>empty); 
  44. no renaming of (>_):.
  45.  
  46.  
  47. FORMAL PAR:: "FP".
  48.  
  49. %TEX
  50. {\tt Replace list} makes a replace list
  51. containing  the formal parameter list and the corresponding actual parameters.
  52. %
  53.  
  54.  
  55. replace list (>replace list,>VValApply*vsym cs*a 1,
  56.            >VMacLambda*f 1*rest,rest>):
  57.     where (>vsym cs,VSym*_>), ->,
  58.     match  (>replace list,>f 1,>a 1);
  59. replace list (>replace list,>VValApply*VVal first cs*a i,
  60.                   >VMac first cs,rest>): ->,
  61.     replace list (>replace list,>VVal first cs,>VMac first cs,
  62.                      VMacLambda*f i*rest>),
  63.     match (>replace list,>f i ,>a i);
  64. replace list (>replace list,>VSym*_, >fc,fc>):.
  65. %TEX
  66.  
  67. \subsection{ Transform lists}
  68. The following code is all generated.
  69. %
  70.  
  71. trans def list (> node, >LIST * ds ):
  72.     trans def els (> ds ,> ds ),
  73.         remove macros and par defs (>ds, trans def els>),
  74.         repair (>node,>LIST, >trans def els).
  75.  
  76. trans def els (> node,> trans def * trans def els ):
  77.     trans def(> trans def,> trans def),->,
  78.     trans def els (> trans def els ,> trans def els );
  79. trans def els (> constant, > empty):.
  80.  
  81. trans typ list (> node, >LIST * trans typ els ):
  82.     trans typ els (> trans typ els ,> trans typ els ).
  83.  
  84. trans typ els (> node,> trans typ * trans typ els ):
  85.     trans typ(> trans typ,> trans typ),->,
  86.     trans typ els (> trans typ els ,> trans typ els );
  87. trans typ els (> constant, > empty):.
  88.  
  89. trans formcon list (> node, >LIST * trans formcon els ):
  90.     trans formcon els (> trans formcon els ,> trans formcon els ).
  91.  
  92. trans formcon els (> node,> trans formcon * trans formcon els ):
  93.     trans formcon(> trans formcon,> trans formcon),->,
  94.     trans formcon els (> trans formcon els ,> trans formcon els );
  95. trans formcon els (> constant, > empty):.
  96.  
  97. trans val list (> node, >LIST * trans val els ,>apply node):
  98.     trans val els (> trans val els ,> trans val els ,>apply node).
  99.  
  100. trans val els (> node,> trans val * trans val els,>apply node ):
  101.     trans val(> trans val,> trans val,>apply node),->,
  102.     trans val els (> trans val els ,> trans val els ,>apply node);
  103. trans val els (> constant, > empty,>apply node):.
  104.